package com.ly.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ly.common.core.bean.R;
import com.ly.common.core.bean.dto.EnableDTO;
import com.ly.system.system.bean.dto.AppDTO;
import com.ly.system.system.bean.dto.LoginDTO;
import com.ly.system.system.bean.entity.SysUser;

import java.util.List;

/**
 * 用户-服务
 *
 * @author jeecg
 * @since 2018-12-20
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 查询-id
     */
    R getId(String id);

    /**
     * 列表
     *
     * @param entity
     * @return
     */
    R getList(SysUser entity);

    /**
     * 分页
     */
    R getPage(SysUser entity, Page<SysUser> page);

    /**
     * 新增
     */
    R add(SysUser entity);

    /**
     * 修改
     */
    R edit(SysUser entity);

    /**
     * 删除-id
     */
    R delete(String id);

    /**
     * 批量删除
     */
    R deleteBatch(String ids);

    /**
     * 当前用户信息
     * @return
     */
    R getCurrentUserData();

    /**
     * 查询用户角色集合
     *
     * @param userid
     * @return
     */
    R getRoleByUserId(String userid);

    /**
     * 查询用户职务集合
     *
     * @param userid
     * @return
     */
    R getPostByUserId(String userid);


    /**
     * 重置密码-移动端
     *
     * @param dto
     * @return
     */
    R updatePassword4App(AppDTO dto);

    /**
     * 重置密码-pc端
     *
     * @param dto
     * @return
     */
    R updatePassword(LoginDTO dto);

    /**
     * 根据用户名查询以及装配租户信息
     *
     * @param username 用户名
     * @return SysUser
     */
    SysUser getUserByName(String username);

    /**
     * 添加用户和用户角色关系
     *
     * @param user
     * @param roles
     */
    void addUserWithRole(SysUser user, String roles);

    /**
     * 封装用户部门名称
     * @param list
     */
    void wrapperDeptNamesByUser(List<SysUser> list);

    /**
     * 根据 orgCode 查询用户，包括子部门下的用户
     *
     * @param id
     * @param page       分页参数
     * @return
     */
    R getUserByDept(String id,IPage page);

    /**
     * 根据角色Id查询
     *
     * @param page
     * @param roleId   角色id
     * @param username 用户账户名称
     * @return
     */
    IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username);

    /**
     * 根据手机号获取用户名和密码
     *
     * @param phone 手机号
     * @return SysUser
     */
    SysUser getUserByPhone(String phone);

    /**
     * 根据邮箱获取用户
     *
     * @param email 邮箱
     * @return SysUser
     */
    SysUser getUserByEmail(String email);

    /**
     * 校验用户是否有效
     *
     * @param sysUser
     * @return
     */
    R checkUserIsEffective(SysUser sysUser);

    /**
     * 回收站用户
     */
    R getRecycleUser();

    /**
     * 回收站：还原
     *
     * @return boolean
     */
    R putRecycleUser(EnableDTO dto);

    /**
     * 彻底删除被逻辑删除的用户
     *
     * @param userIds 存放用户id集合
     * @return boolean
     */
    R removeLogicDeleted(String userIds);

    /**
     * 修改用户账号状态
     */
    R updateStatus(EnableDTO dto);
    /**
     * 验证用户是否为管理员
     *
     * @param ids
     */
    void checkUserAdminRejectDel(String ids);

    /**
     * 修改手机号
     *
     * @param dto
     */
    R changePhone(AppDTO dto);
}
